import { type ClassValue, clsx } from "clsx"
import { twMerge } from "tailwind-merge"
import crypto from 'crypto';

/**
 * 合并Tailwind CSS类名的工具函数
 * 支持条件类名、数组类名等多种形式的合并
 * @param inputs 类名参数，可以是字符串、对象、数组等
 * @returns 合并后的类名字符串
 */
export function cn(...inputs: ClassValue[]) {
  return twMerge(clsx(inputs))
}

/**
 * 生成软件著作权申请的唯一序列号
 * 用于标识每一次申请，格式：SWC-时间戳后6位-随机数-哈希前8位
 * 
 * 示例：SWC-123456-ABC123-DE45F678
 * 
 * @returns 格式化的序列号字符串
 */
export function generateSerialNumber(): string {
  // 获取当前时间戳作为基础
  const timestamp = Date.now().toString();
  // 生成6位随机字母数字字符串
  const random = Math.random().toString(36).substring(2, 8);
  // 使用时间戳和随机数生成MD5哈希，确保唯一性
  const hash = crypto.createHash('md5').update(timestamp + random).digest('hex');
  
  // 组合成最终格式：SWC-时间戳后6位-随机数-哈希前8位
  return `SWC-${timestamp.slice(-6)}-${random}-${hash.slice(0, 8)}`.toUpperCase();
}

/**
 * 验证序列号格式是否正确
 * 用于验证用户输入的序列号是否符合系统生成的格式
 * 
 * 正确格式：SWC-6位数字-6位字母数字-8位十六进制字符
 * 
 * @param serialNumber 要验证的序列号
 * @returns 格式正确返回true，否则返回false
 */
export function validateSerialNumber(serialNumber: string): boolean {
  // 正则表达式验证序列号格式
  const pattern = /^SWC-\d{6}-[a-zA-Z0-9]{6}-[a-fA-F0-9]{8}$/;
  return pattern.test(serialNumber);
}